#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
int dp[100],a[100],from[100];//from记录序列前一个位置
//dp[i]表示以a[i]结尾的最长上升子序列长度
int lis(int n)  //返回值为mark
{
    int mark=1;//记录最长序列末尾位置
    memset(dp,0,sizeof(dp));
    memset(from,0,sizeof(from));
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<=i-1;j++)
        {
            if(a[i]>=a[j]&&dp[j]+1>dp[i])
            {
                dp[i]=dp[j]+1;
                from[i]=j;
            }
        }
        if(dp[i]>dp[mark]) {
            mark=i;
        }
    }
    return mark;
}
void trace(int mark)
{
    stack<int> x;
    for(int i=mark;i;i=from[i])
    x.push(a[i]);
    while(!x.empty()) {
        cout<<x.top()<<" ";
        x.pop();
    }
}
int main()
{
    int k;cin>>k;
    for(int l=1;l<=k;l++)
    {
        int n;cin>>n;
        for(int i=1;i<=n;i++)
        cin>>a[i];
        int pos=lis(n);
        cout<<"length="<<dp[pos]<<"  "<<"LIS:";
        trace(pos);
        cout<<endl;
    }
}

// 3
// 10
// 2 3 4 2 4 3 2 5 6 9
// 11
// 2 4 5 6 4 8 5 9 6 10 11
// 12
// 1 3 5 2 4 3 6 7 6 10 9 12